// 请求参数类型
export interface AnyDataType {
    [key: string]: any;
}
// 请求方式类型
export type MethodType = "GET" | "POST" | "PUT" | "DELETE";
// 返还体类型
interface ParmaseType {
    url: string,
    data?: AnyDataType,
    method: MethodType
}
// 泛型：在定义时不指定类型，而是在使用时指定类型
interface ResponseDataType<T> {
    code: number;
    message: string;
    data: T;
    success: boolean;
}
// 基础路径：请求地址=基础路径+url
const BASE_URL = import.meta.env.VITE_BASE_URL;
import { useUserStore } from "../store/modules/user"
// 这里给promist定义的泛型就是promist返回值的类型就是请求返还体类型就是request返还的类型
function request<T>({ url, data = {}, method = "GET" }: ParmaseType): Promise<T> {
    return new Promise((resolve, reject) => {
        const userStore = useUserStore();

        uni.request({
            url: BASE_URL + url,
            data,
            method,
            // 请求携带token
            header: {
                token: userStore.token,
            },
            success(res) {
                if (res.statusCode >= 200 || res.statusCode < 300) {
                    // 请求成功
                    const data = res.data as ResponseDataType<T>
                    if (data.code === 200) {
                        // 请求功能成功
                        resolve(data.data)
                    } else {
                        // 请求功能失败
                        uni.showToast({
                            title: "请求功能失败~",
                            icon: "error",
                        });
                        reject();
                    }
                } else {
                    // 请求失败
                    uni.showToast({
                        title: "请求失败~",
                        icon: "error",
                    });
                    reject();
                }
            },
            file() {
                uni.showToast({
                    title: "请求失败~",
                    icon: "error",
                });
                reject();
            }
        })
    })
}
export default request;